![Zendesk と Amazon Translate を連携して問い合わせ内容を自動翻訳してみた](https://devio2023-media.developers.io/wp-content/uploads/2019/06/zendesk-medium-black2.png)
Zendesk と Amazon Translate を連携して問い合わせ内容を自動翻訳してみた
今回は、Amazon EventBridge 経由で Lambda を呼び出し Amazon Translate で翻訳した結果を、対象チケット(お問い合わせ)のメモとして自動追記してみました。
やってみた
Zendesk ヘルプにも記載がありますが、ZendeskイベントコネクタでAmazon EventBridgeへ接続するには、下記の設定が必要です。
- Zendesk管理センターでZendeskのイベントソースを設定
- Amazon EventBridgeでZendeskのイベントソースに新しいイベントバスを関連付ける
Zendesk と Amazon EventBridge を接続する
まずは、Zendesk 管理センターにアクセスします。
Zendesk 管理センターの使い方等については、下記の公式ドキュメントをご参照ください。
次に「インテグレーションの設定」リンクをクリックします。
Amazon EventBridge向けイベントコネクタの「接続」リンクをクリックします。
各必須項目に必要な情報を記入します。
項目 | 入力値 |
---|---|
アマゾンウェブサービスのアカウントID | EventBridge で連携する AWS アカウントID |
アマゾンウェブサービスのリージョン | EventBridge で連携するリージョン |
イベントタイプ | チケット/ユーザー/組織からストリームするイベントタイプを選択 |
利用規約 | Zendesk作成アプリの利用規約 に同意する必要があります |
本記事では、東京リージョンを指定しサポートチケットの作成イベントを検知するためにイベントタイプで「Supportチケット」を選択しました。
各項目記入後、接続ボタンをクリックしましょう。
Zendesk のイベントソースをイベントバスと関連付ける
次のステップとして、Zendeskのイベントソースをイベントバスに関連付けします。
下記のリンクから、先程連携した AWS アカウントの Amazon EventBridge コンソールにアクセスします(先の章で指定したリージョンのコンソールにアクセスしてください)
左袖のメニューから、パートナーイベントソースを選択します。
パートナーイベントソースのページに、先程接続した Zendesk イベントコネクタのイベントソースが「保留中」というステータスで表示されているはずです。
対象となるイベントソースを選択し、右上に表示されている「イベントバスと関連付ける」ボタンをクリックしましょう。
必要に応じてアクセス許可のチェックボックスを選択してください。(本記事では、指定なしのまま)最後に「関連付ける」ボタンをクリックします。
ステータスが「アクティブ」に遷移したら作業完了です。
Zendesk のイベントが Zendesk から Amazon EventBridge にストリーミングされる状態になりました。次に、Amazon EventBridge 経由で Zendesk からストリーミングされたイベントを処理するためのルールとターゲット(Lambda 関数)を設定します。 事前準備として、先程設定したイベントバスの ARN 情報を控えておきます。
Zendesk のイベントソースを処理するためのルールとターゲットを作成する
今回のシナリオでは、顧客が問い合わせした際の内容(本文)が日本語で無い場合に Amazon Translate で機械翻訳を行い、翻訳後の日本語文章を Zendesk チケットに社内メモとして追記することとします。
そのため、EventBridge ルールを作成する際のイベントパターンは Zendesk チケットが作成されたというパターンになります。
{ "detail-type": ["Support Ticket: Ticket Created"], "resources": ["Support Ticket"] }
パターン定義については、下記のナレッジを参考とさせていただきました。
イベントスキーマ構造については、公式ドキュメントを参照ください。
今回は、Serverless Framework を利用して Amazon EventBridge にストリーミングされた Zendesk のイベントを処理する Lambda 等をデプロイします。
ソースコードについては、Git リポジトリで公開しておりますので PoC もしくは検証用途にてご利用ください。
前の章で控えておいたイベントバスの ARN 情報を serverless.yml の eventBus キーに指定しておきます。
functions: message: handler: handler.message events: - eventBridge: eventBus: arn:aws:events:ap-northeast-1:xxxxxxxxxxxx:event-bus/aws.partner/zendesk.com/xxxxxxxx/default pattern: resources: - 'Support Ticket' detail-type: - 'Support Ticket: Ticket Created'
serverless.yml で EventBridge に関する設定については、下記の公式ドキュメントを参照してください。
serverless.yml の修正が完了したら、デプロイしましょう(Serverless Framework 等の環境構築手順については割愛いたします)
$ pipenv --python 3.8 $ pipenv install zenpy boto3 $ sls plugin install -n serverless-python-requirements $ sls deploy --stage dev : Service Information service: amazon-translate stage: dev region: ap-northeast-1 stack: amazon-translate-dev resources: 9 api keys: None endpoints: None functions: message: amazon-translate-dev-message layers: None
デプロイ処理が完了すれば、Zendesk イベントソースに関連付けられたイベントバスに対して、新しくルールが作成されていることが確認できるはずです。
ここまで完了できれば、後少しです。
最後に、Amazon Translate で翻訳したメッセージを Zendesk API を利用して対象のチケットへ内部的なメモを追記するための API リクエストで必要となる API Token を払い出し、トークン情報等を AWS Secrets Manager に保存します。
Zendesk の API Token を発行する
ブラウザで Zendesk にアクセスし、左袖メニューの管理(歯車アイコン)から API を選択します。
API トークンアクセスが無効の場合、トグルボタンをクリックし有効化しましょう。
API トークンアクセスを有効化したら、その下部にある「API トークンを追加」ボタンがクリックできます。
管理上、「API トークンの説明」フィールドには後で確認した際にどのサービスで利用しているか判別できる情報を記入しておいた方が良いかと思います。 また、保存ボタンをクリックする前に 必ず API トークンをコピーして保存しましょう。
最後に、払い出した API Token を Lambda から安全に利用するために AWS Secrets Manager に保存します。
AWS Secrets Manager に Zendesk API Token を保存する
ここでは、AWS CLI を利用します。
まずは、シークレットとして保存する JSON ファイルを作成します。
$ cat <<EOF > secret.json { "token": "xxxxxxxxxxxxxxxxxxxxxxxxxx", "email": "admin@example.net", "subdomain": "zendesk-subdomain" } EOF
token キーには、先の章で払い出された API トークンを指定します。
email キーは、Zendesk の対象チケットへメモを追記する際に利用する Zendesk エージェント(ユーザー)に登録された Email アドレスを指定します。
subdomain キーは、お使いの Zendesk URL で https://subdomain.zendesk.com/
の subdomain 部分に該当するサブドメイン名を指定します。
secret.json ファイル作成後、シークレットを作成します。
$ aws secretsmanager create-secret \ --region ap-northeast-1 \ --name trial/zendesk \ --secret-string file://secret.json $ rm -f secret.json
コマンド引数(--name)で指定しているシークレット名は、serverless.yml の Lambda 環境変数に設定する ZENDESK_SECRET キー名と同一にしておきます。
お疲れ様でした! これで、全ての設定が完了し準備が整いました。
色々な言語で Zendesk に問い合わせ(テスト)してみる
まずは、英語
次に、韓国語
タイ語
ドイツ語
良さそうですね。
まとめ
現時点で、70を超える言語のサポートが提供された Amazon Translate をヘルプデスクシステムである Zendesk と連携させることで様々な言語の問い合わせを自動的に指定した言語へ機械翻訳する仕組みが構築できました。また、Amazon Translate 含め機械翻訳の精度も時代の流れとともに日々向上していくことが期待されます。
海外リージョンの AWS 基盤を利用することで迅速に世界中のユーザーへサービスが提供できるようになった一方、ビジネスが拡大した際に様々な国々のお客様へサポートを提供する機会は、増加する可能性が考えられます。
言語の壁を超えて、より迅速にサポートを提供するための補助ツールとして、こういった仕組みを導入してみても良いかもしれないなと思いました。
ではでは